package com.eightbears.beboy.ui.user.activity;

import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;
import android.support.v4.widget.SwipeRefreshLayout;
import android.support.v7.widget.RecyclerView;
import android.util.TypedValue;
import android.view.View;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.ProgressBar;
import android.widget.RelativeLayout;
import android.widget.TextView;
import android.widget.Toast;

import com.chad.library.adapter.base.BaseQuickAdapter;
import com.eightbears.beboy.R;
import com.eightbears.beboy.adapter.LevelClientAdapter;
import com.eightbears.beboy.base.BaseActivity;
import com.eightbears.beboy.base.util.ErrorUtils;
import com.eightbears.beboy.base.util.GsonUtil;
import com.eightbears.beboy.base.util.SPUtil;
import com.eightbears.beboy.base.util.okhttp.OkHttpUtils;
import com.eightbears.beboy.base.util.okhttp.callback.StringCallback;
import com.eightbears.beboy.base.view.SwipeBackLayout;
import com.eightbears.beboy.base.view.layout.MyLinearLayoutManager;
import com.eightbears.beboy.entity.ChildrenEntity;
import com.eightbears.beboy.entity.status.Status_Error;
import com.socks.library.KLog;

import butterknife.BindView;
import butterknife.ButterKnife;
import butterknife.OnClick;
import okhttp3.Call;

import static com.eightbears.beboy.base.util.CommonAPI.CONNECTION_STATUS_SUCCESS;
import static com.eightbears.beboy.base.util.CommonAPI.KEY_HTTP_HEADER;
import static com.eightbears.beboy.base.util.CommonAPI.PARAMS_PAGE_SIZE;
import static com.eightbears.beboy.base.util.CommonAPI.URL_MLMCHILDREN;
import static com.eightbears.beboy.base.util.CommonAPI.delayMillis;
import static com.eightbears.beboy.ui.user.fragment.MyClientFragment.PARAMS_MY_CLIENT;

/**
 * 等级客户
 */
public class LevelClientActivity extends BaseActivity implements
        BaseQuickAdapter.RequestLoadMoreListener, SwipeRefreshLayout.OnRefreshListener {

    @BindView(R.id.view_empty)
    View view_empty;
    @BindView(R.id.ll_back)
    LinearLayout mLlBack;
    @BindView(R.id.tv_title)
    TextView mTvTitle;
    @BindView(R.id.rl_title_root)
    RelativeLayout mRlTitleRoot;
    @BindView(R.id.tv_right_img_btn)
    TextView mTvRightImgBtn;
    @BindView(R.id.tv_save_address)
    TextView mTvSaveAddress;
    @BindView(R.id.tv_submit)
    TextView mTvSubmit;
    @BindView(R.id.iv_right_icon)
    ImageView mIvRightIcon;
    @BindView(R.id.ll_right)
    LinearLayout mLlRight;
    @BindView(R.id.progressBar)
    ProgressBar mProgressBar;
    @BindView(R.id.rv_list)
    RecyclerView mRvList;
    @BindView(R.id.swipeLayout)
    SwipeRefreshLayout mSwipeLayout;
    @BindView(R.id.iv_empty)
    ImageView mIvEmpty;
    @BindView(R.id.tv_empty_text)
    TextView mTvEmptyText;
    @BindView(R.id.sw_finish)
    SwipeBackLayout mSwFinish;
    private int page = 1;
    private boolean isErr = true;
    private int isEnd = 0;

    private LevelClientAdapter mLevelClientAdapter;
    private String mLevel;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_level_client);
        ButterKnife.bind(this);
        initView();
        initData();
        initEvent();
    }

    @Override
    protected void initView() {
        ButterKnife.bind(this);
        mLevel = (String) getExtras().get(PARAMS_MY_CLIENT);
        if (null != mLevel) {
            if (mLevel.equals(getString(R.string.text_client_level_s))) {
                mTvTitle.setText(R.string.text_client_s);
            } else if (mLevel.equals(getString(R.string.text_client_level_m))) {
                mTvTitle.setText(R.string.text_client_m);
            } else if (mLevel.equals(getString(R.string.text_client_level_l))) {
                mTvTitle.setText(R.string.text_client_l);
            }
        }
    }

    @Override
    protected void initData() {
        initAdapter();
        getData();
    }

    private void initAdapter() {
        mSwipeLayout.setOnRefreshListener((SwipeRefreshLayout.OnRefreshListener) mContext);
        mSwipeLayout.setProgressViewOffset(true, 0, (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 100, getResources().getDisplayMetrics()));
        mSwipeLayout.setColorSchemeColors(getResources().getColor(R.color.text_select_color),
                getResources().getColor(R.color.text_select_color),
                getResources().getColor(R.color.text_select_color),
                getResources().getColor(R.color.text_select_color));
        mLevelClientAdapter = new LevelClientAdapter();
        mRvList.setLayoutManager(new MyLinearLayoutManager(mContext));
        mLevelClientAdapter.openLoadAnimation();
        mLevelClientAdapter.setOnLoadMoreListener(this);
        mRvList.setAdapter(mLevelClientAdapter);
    }

    @Override
    protected void initEvent() {
        mSwFinish.setCallBack(new SwipeBackLayout.CallBack() {
            @Override
            public void onFinish() {
                finish();
            }
        });
        mLevelClientAdapter.setOnItemChildClickListener(new BaseQuickAdapter.OnItemChildClickListener() {
            @Override
            public void onItemChildClick(BaseQuickAdapter adapter, View view, int position) {
                ChildrenEntity.DataBean.ListBean listBean = (ChildrenEntity.DataBean.ListBean) adapter.getData().get(position);
                switch (view.getId()) {
                    case R.id.iv_user_head:
//                        startLocalActivity(PostDetailActivity.class, PARAMS_POST_ID, payOrder.getObject_id());
                        break;
                }
            }
        });
    }

    private void getData() {
        mSwipeLayout.setRefreshing(true);
        OkHttpUtils.get().url(URL_MLMCHILDREN)
                .addHeader(KEY_HTTP_HEADER, "Bearer " + SPUtil.getAccessToken())
                .addParams("level", String.valueOf(mLevel))
                .addParams("page", String.valueOf(page))
                .addParams("size", String.valueOf(PARAMS_PAGE_SIZE))
                .build().execute(new StringCallback() {
            @Override
            public void onResponse(String response) {
                KLog.e(response);
                mSwipeLayout.setRefreshing(false);
                ChildrenEntity childrenEntity = GsonUtil.fromJson(response, ChildrenEntity.class);
                if (CONNECTION_STATUS_SUCCESS.equals(String.valueOf(childrenEntity.getStatus_code()))) {
                    isEnd = childrenEntity.getData().getIs_end();
                    if (page == 1) {
                        if (childrenEntity.getData().getList().size() == 0)
                            view_empty.setVisibility(View.VISIBLE);
                        else {
                            view_empty.setVisibility(View.GONE);
                            mLevelClientAdapter.setNewData(childrenEntity.getData().getList());
                        }
                    } else {
                        mLevelClientAdapter.addData(childrenEntity.getData().getList());
                        mLevelClientAdapter.loadMoreComplete();
                    }
                }
            }

            @Override
            public void onError(Call call, Exception e) {
                KLog.e(e.getMessage());
                mSwipeLayout.setRefreshing(false);
                isErr = false;
                Status_Error status_error = GsonUtil.fromJson(e.getMessage(), Status_Error.class);
                ErrorUtils.alertError((Activity) mContext, status_error);
            }
        });
    }

    @OnClick(R.id.ll_back)
    void back() {
        finish();
    }

    @Override
    public void onRefresh() {
        mLevelClientAdapter.setEnableLoadMore(false);
        new Handler().postDelayed(new Runnable() {
            @Override
            public void run() {
                isErr = true;
                page = 1;
                mLevelClientAdapter.getData().clear();
                getData();
                mLevelClientAdapter.setEnableLoadMore(true);
            }
        }, delayMillis);
    }

    @Override
    public void onLoadMoreRequested() {
        new Handler().postDelayed(new Runnable() {
            @Override
            public void run() {
                if (isEnd == 1) {
                    mLevelClientAdapter.loadMoreEnd(true);
                } else {
                    if (isErr) {
                        page++;
                        getData();
                    } else {
                        isErr = true;
                        Toast.makeText(mContext, R.string.network_anomalies, Toast.LENGTH_LONG).show();
                        mLevelClientAdapter.loadMoreFail();
                    }
                }
            }
        }, delayMillis);
    }
}
